/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.unesp.demac.bcc.soo.dao;

import br.unesp.demac.bcc.soo.bean.Funcionario;
import br.unesp.demac.bcc.soo.bean.Login;
import br.unesp.demac.bcc.soo.bean.Pessoa;
import br.unesp.demac.bcc.soo.util.FabricaConexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *
 * @author flavioam
 */
public class LoginDAOImp implements LoginDAO {

    @Override
    public Login selecionaLoginByIdPessoa(int idPessoa) throws Exception {

        Login l = null;
        Connection con = null;

        try {

            con = FabricaConexao.getConexao();

            String sql = "select * from Logins where Pessoas_idPessoas = ?";

            PreparedStatement pstmt = con.prepareStatement(sql);

            pstmt.setInt(1, idPessoa);

            ResultSet rs = pstmt.executeQuery();

            if (rs.next()) {

                l = new Login();
                l.setSenha(rs.getString("senha"));
                l.setUsuario(rs.getString("usuario"));
            }

        } catch (SQLException e) {

            throw new Exception("Erro ao selecionar login: " + e.getMessage());

        } finally {

            FabricaConexao.fechar(con);

        }
        return l;
    }

    @Override
    public boolean salvaLogin(Pessoa p, Connection con) throws Exception {

        boolean saved = false;

        try {

            String sql = "insert into Logins (usuario, senha,Pessoas_idPessoas) values (?,?,?)";

            PreparedStatement pstmt = con.prepareStatement(sql);

            Login l = p.getLogin();

            pstmt.setString(1, l.getUsuario());
            pstmt.setString(2, l.getSenha());
            pstmt.setInt(3, p.getIdPessoa());

            pstmt.executeUpdate();

            saved = true;

        } catch (SQLException e) {

            throw new Exception("Erro ao salvar login: " + e.getMessage());

        } 
            return saved;

    }

    @Override
    public Funcionario autenticacao(Login l) throws Exception {

        Funcionario f = null;
        Connection con = null;

        try {

            con = FabricaConexao.getConexao();

            String sql = "select p.idPessoas, l.senha "
                    + "from Logins l, Pessoas p, Funcionarios f "
                    + "where l.Pessoas_idPessoas = p.idPessoas and "
                    + "      f.Pessoas_idPessoas = p.idPessoas and "
                    + "      l.usuario = ?";

            PreparedStatement pstmt = con.prepareStatement(sql);

            pstmt.setString(1, l.getUsuario());

            ResultSet rs = pstmt.executeQuery();

            if (rs.next()) {

                String senha = rs.getString("senha");

                if (senha.equals(l.getSenha())) {
                    FuncionarioDAO fDao = new FuncionarioDAOImp();

                    f = fDao.selecionaFuncionarioPorId(Integer.parseInt(rs.getString("idPessoas")));

                }
            }

        } catch (SQLException e) {

            throw new Exception("Erro ao tentar autenticar: " + e.getMessage());

        } finally {
            FabricaConexao.fechar(con);
        }            return f;
    }

    @Override
    public boolean editaLogin(Pessoa p, Connection con) throws Exception {

        boolean saved = false;

        try {

            String sql = "update Logins set usuario = ?, senha = ? where Pessoas_idPessoas = ?";
            System.out.println(sql);
            PreparedStatement pstmt = con.prepareStatement(sql);

            Login l = p.getLogin();

            pstmt.setString(1, l.getUsuario());
            pstmt.setString(2, l.getSenha());
            pstmt.setInt(3, p.getIdPessoa());

            pstmt.executeUpdate();

            saved = true;

        } catch (SQLException e) {

            throw new Exception("Erro ao editar login: " + e.getMessage());

        } 
            return saved;
    }
}
